const express = require("express");
const router = express.Router();
const {
  add,
  del,
  update,
  allList,
  updatePass,
  getUserInfo,
  changePassword,
} = require("../public/javascripts/users");
const jwt = require("jsonwebtoken");
const bcrypt = require("bcryptjs");
const config = require("../config");
const db = require("../db");

router.post("/login", (req, res) => {
  const userInfo = req.body;
  //对客户端的数据进行校验
  if (userInfo.userName === "" || userInfo.password === "") {
    return res.send({
      success: false,
      message: "用户名和密码不能为空",
    });
  }
  // 定义 SQL 语句
  const sql = "select * from selection_user where userName=?";
  // 执行 SQL 语句，根据用户名查询用户的信息
  db.query(sql, userInfo.userName, (err, result) => {
    // 执行 SQL 语句失败
    if (err) return res.cc(err);
    // 执行 SQL 语句成功,但是获取的数据条数不为1 也是失败的
    if (result.length !== 1) return res.cc("登录失败！");
    // 经过上方俩条判断条件，则证明执行 SQL 成功
    console.log("result", result);
    // TODO ：判断密码是否正确
    const comRes = bcrypt.compareSync(userInfo.password, result[0].password);
    if (!comRes) return res.cc("登陆失败");
    // 在服务器端生成 Token 字符串
    const user = {
      ...result[0], // 解构用户信息
      password: "", //密码等敏感信息置空
    };
    // 对用户的信息进行加密，生成 token 字符串
    const tokenStr = jwt.sign(user, config.jwtSecretKey, {
      expiresIn: config.expiresIn, //tonken 有效期
    });
    // 调用 res.send 将Token响应给客户端
    res.send({
      success: true,
      data: {
        user: user,
        token: "Bearer " + tokenStr,
      },
      message: "登录成功！！！",
    });
  });
});

router.post("/add", (req, res) => {
  const userInfo = req.body;
  //对客户端的数据进行校验
  if (!userInfo.userName) {
    return res.send({
      success: false,
      message: "姓名不能为空",
    });
  }
  // 执行定义好的登录函数
  add(req, res);
});

router.delete("/delete", (req, res) => {
  const userInfo = req.body;
  //对客户端的数据进行校验
  if (!userInfo.userId) {
    return res.send({
      success: false,
      message: "编码不能为空",
    });
  }
  // 执行定义好的登录函数
  del(req, res);
});

router.put("/update", (req, res) => {
  const userInfo = req.body;
  //对客户端的数据进行校验
  if (!userInfo.userId) {
    return res.send({
      success: false,
      message: "编码不能为空",
    });
  }
  // 执行定义好的登录函数
  update(req, res);
});

router.post("/list", (req, res) => {
  // 执行定义好的登录函数
  allList(req, res);
});

router.put("/updatePass", (req, res) => {
  // 执行定义好的登录函数
  updatePass(req, res);
});
router.post("/getUserInfo", (req, res) => {
  // 执行定义好的登录函数
  getUserInfo(req, res);
});

router.post("/changePassword", (req, res) => {
  // 执行定义好的登录函数
  changePassword(req, res);
});
module.exports = router;
